package V1;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import Commands.CmdMarquerMesure;
import Commands.CmdMarquerTemps;
import Commands.Command;
import IHM.Afficheur;
import Metronome.Controler;
import Metronome.ControlerImpl;
import Metronome.MoteurMetronome;
import Metronome.MoteurMetronomeImpl;

public class MoteurMetronomeImplTest {

	private  Command cmdMarquerTemps;
	private  Command cmdMarquerMesure;
	
	private MoteurMetronome moteur;
	private Controler controler;
	private Afficheur afficheur;
	
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		cmdMarquerTemps = new CmdMarquerTemps(controler);
		cmdMarquerMesure = new CmdMarquerMesure(controler) ;
		
		moteur = new MoteurMetronomeImpl(cmdMarquerTemps, cmdMarquerMesure);
		controler = new ControlerImpl(moteur,afficheur);
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testAddObserver() {
		moteur.addObserver(new ControlerImpl(moteur,afficheur));
		
		assertEquals(1, moteur.getObservers().size());
	}

	@Test
	public void testDeleteObserver() {
		Controler test = new ControlerImpl(moteur,afficheur);
		moteur.addObserver(test);
		moteur.deleteObserver(test);
		
		assertEquals(0, moteur.getObservers().size());
	}
}
